package cn.doit.dat06

import cn.doit.dat06._05_科里化函数._

object _06_隐式转换 {
  def main(args: Array[String]): Unit = {
   /* implicit val num :Int= 10
//    implicit val abc :Int = 20
    implicit val str :String= "50"

/*    def add(a:Int,b:String)={
      a+b.toInt
    }
    println(add(10, "20"))*/

    //隐式参数
    def add1(implicit a:Int, b:String)={
      a+b.toInt
    }

    def add2(a:Int)(implicit b:String)={
      a+b.toInt
    }

//    println(add1(20, "20"))
    //自己偷偷摸摸的把两个参数穿进去了   ，可以显示的去传，也可以不传
    //如果你调用方法的时候不传参数，那么他就会去上下文中找有没有数据类型符合条件的隐式参数
    println(add1)

    add2(10)*/

    implicit def str2ABC(str:String)={
      new ABC(10,"zss")
    }

    "lss".fly()


    //我现在想要int类型有一个方法，这个方法是string类型里面的concat
    implicit def int2String(i:Double)={
      "abc"
    }
    val num :Int= 10

    //这边就是转换成了用 abc 去调用 aaa
    val str: String = num.concat("aaa")
    println(str)

    println("bcd".concat("abc"))


    val ant: Ant = new Ant
//    ant.eatElephant()

  }
class snake(ant:Ant){
    def eatElephant()={
      println("我能吃大象")
    }
  }

}

class Ant

class ABC(val id:Int,val name:String){
  def fly()={
    println(name+"飞起来了")
  }
}





